package model;

import java.util.ArrayList;

import org.w3c.dom.Element;
import org.w3c.dom.Node;

public class Ciudad {
	// posiciones en KM
	protected String nombre;
	protected Posicion posicion;
	protected ArrayList<Lugar> lugares ;
	
	
	public Ciudad(String nomb, Posicion pos, ArrayList<Lugar> lugares){
		this.nombre = nomb;
		this.posicion = pos;
		this.lugares =lugares;
	}

	public int calcularDistanciaA(Ciudad otraCiudad) {
		int distanciaX = (int) Math.pow((this.posicion.getPosX() - otraCiudad.obtenerPosicion().getPosX()), 2);
		int distanciaY = (int) Math.pow((this.posicion.getPosY() - otraCiudad.obtenerPosicion().getPosY()), 2);

		return (int) (Math.sqrt((distanciaX + distanciaY)));

	};

	public Posicion obtenerPosicion(){
		return this.posicion;
	}
	
	public String obtenerNombre(){
		return nombre;
	}
	
	public Lugar obtenerLugar(String nombre){
		Lugar lugarADevolver = null;
		for(int lugar = 0; lugar < this.lugares.size(); lugar++){
			if( this.lugares.get(lugar).obtenerNombre().equals(nombre) ){
				lugarADevolver = this.lugares.get(lugar);
			}	
		}
		return lugarADevolver;
	}

	public void agregarLugar(Lugar unLugar) {
		this.lugares.add(unLugar);
	}
	

	public static Ciudad hidratar (Node elementoCiudad){
		Ciudad nuevaCiudad= new Ciudad("", null,null);
		nuevaCiudad.lugares= new ArrayList<Lugar>();
		
			nuevaCiudad.nombre= ((Element) elementoCiudad).getAttribute("nombre");
			int posicionx= Integer.parseInt (((Element) elementoCiudad).getAttribute ("posx"));
			int posiciony= Integer.parseInt (((Element) elementoCiudad).getAttribute ("posy"));
			nuevaCiudad.posicion= new Posicion(posicionx, posiciony);
			
			for (int j=0; j<elementoCiudad.getChildNodes().getLength(); j++){
				Element elementoLugar= (Element)elementoCiudad.getChildNodes().item(j);
				Lugar lugar = Lugar.hidratar(elementoLugar);
				nuevaCiudad.agregarLugar(lugar);
				}
			
		
		
		return nuevaCiudad;
		
				}
	
	
}
